(function($) {
	$.fn.jMarquee = function(o) {
		o = $.extend({
			speed:20,
			visible:1,
			step:1,
			direction:"left",
			width:100,
			height:100
		}, o || {});

		var i = 0;
		var div = $(this);
		var ul = $("ul",div);
		var tli = $("li",ul);
		var liSize = tli.size();
		if(o.direction == "left") tli.css("float","left");
		var liWidth = tli.innerWidth();
		var liHeight = tli.height();
		var ulHeight = liHeight * liSize;
		var ulWidth = liWidth * liSize;

		if(liSize > o.visible) {
			ul.append(tli.slice(0,o.width).clone());
			li = $("li",ul);
			liSize = li.size();
			div.css({"position":"relative","overflow":"hidden"});
			ul.css({"position":"relative","margin":"0","padding":"0","list-style":"none"});
			li.css({"position":"relative","margin":"0","padding":"0"});
			switch(o.direction) {
				case "left":
					div.css("width",(o.width) + "px");
					ul.css("width",(liWidth * liSize) + "px");
					li.css("float","left");
					break;
				case "up":
					div.css({"height":(o.height) + "px"});
					ul.css("height",(liHeight * liSize) + "px");
					break;
			}
			var MyMar = setInterval(ylMarquee,o.speed);
			ul.hover(
				function() { clearInterval(MyMar); },
				function() { MyMar=setInterval(ylMarquee,o.speed); }
			);
		};

		function ylMarquee() {
			if(o.direction == "left") {
				if(div.scrollLeft() >= ulWidth) {
					div.scrollLeft(0);
				} else {
					var leftNum = div.scrollLeft();
					leftNum += parseInt(o.step);
					div.scrollLeft(leftNum);
				}
			}
			if(o.direction == "up") {
				if(div.scrollTop() >= ulHeight) {
					div.scrollTop(0);
				} else {
					var topNum = div.scrollTop();
					topNum += parseInt(o.step);
					div.scrollTop(topNum);
				}
			}
		};

	};

})(jQuery);